/**
 * 缓存 api
 */
const { $fn, $http } = window

const apiList = {
	// 集团列表
	corp_group: 'corp-group/select',
	// 公司列表
	company: 'company/select',
	// 部门列表
	department: 'department/select',
	// 科室
	ke_shi: 'project-team/select',		// 科室
	shi_yan_ke_shi: 'project-team/selectMenu', // 科室下拉
	getOutsourcingDepartList: 'specimen/getOutsourcingDepartList',	// 外包单位
	// 岗位
	job: 'project-team/jobAllselect',
	gang_wei: 'project-team/laboratoryselect', 	// 岗位
	// 人员信息
	employee: 'employee/select',					// 员工
	salesman: 'bs-salesman/select', 				// 业务员
	pathologySelect: 'employee/pathologySelect',	// 病理人
	// 权限
	parent_menu: 'menu/select',					// 上级菜单
	position: 'position/select',				// 职位权限
	role: 'role/select',						// 角色权限
	group: 'groups/select',						// 分组权限
	// 区域
	bs_area: 'bs-area/select', 					// 业务区域
	box_address: 'sp-box-address/select', 		// 办事处地址
	// 医院
	hospital: 'bs-hospital/select',
	/* 新增绑定医院接口 2021-08-17  --耿琰 */
	// 绑定医院  
	bind_hospital: 'bs-hospital/selectAll',
	// 项目列表
	project_name: 'kind-info/select',			// 项目名称
	project_select: 'kind-info/tSselect',		// 项目
	all_project_select: 'kind-info/allSelect',
	labkindselect: 'specimen/labkindselect',
	specimenkindSelect: 'specimen-kind/selectkind',
	
	// 自然项目 | 营销项目（关键字搜索）| 项目名称
	nature_project: 'kd-market/select',
	// 单一项目
	singleKindSelect: 'kind-info/kindSelect',
	// 组合项目 （关键字搜索）
	combinKindSelect: 'kd-combin-project/select',
	// 设备列表
	deviceNameSelect: 'device/selectName',
	device_name: 'device/select',				// 设备名称
	device_result: 'result-unit-item/getDeviceResult4Select', 	// 设备结果
	// GPS设备
	gps: 'sp-gps-device/select',
	// 模板
	report_template: 'kd-report-from/select', 	// 报告单模板
	export_template: 'lis-outsourcing-company/getExportModel4Select', 	// 导出模板
	num_template: 'lis-lab-tag/select', 				// 实验号模板
	qt_template: 'qt-comp-template/select', 			// 物价模板
	tag_template: 'lis-tag-template/select', 			// 项目标签模板
	labelFormatType: 'settings/getLabelFormatType', 	// 模板处理方式
	// 物料
	mtApplyFormSelect: 'mt-apply-form/select', 		// 申请单
	material: 'material/select', 				// 物料列表
	// 所属分拣组
	SortGroupSelect: 'pick-group/select',
	// 字典分类
	dictionary: 'dictionary/select',
	// 标本
	slogSelect: 'slog/select', 			// 日志类型
	printerSelect: 'printer/select', 	// 打印机
	// TCT选项
	conftctSelect: 'conf-tct/selectSum',
	// 流程名称
	process_name: 'fl-process/select',
	// 节点名称
	node_name: 'fl-process-node/select',
	// 被授权者
	be_authorized: 'fl-process-auth/select',
	// 医生列表
	doctor:'bs-doctor/select',
	// 医院科室
	hospital_ke_shi: 'bs-depart/select',
	// 轮转规则
	rotateConfSelect: 'rt-rotate-conf/select',
	// 药敏列表
	drugSensSelect: 'drug-sensitivity/select',
	// 合并规则
	merge_select: 'merge-group/select',
	// 物价项目
	qtItemSourceSelect: 'qt-item-source/select',

	drug_group: 'drug-group/selectList',					// 药敏组合
	result_tips_type: 'result-tips-temp/select', 			// 结果提示类型
	draw_materials_doctor: 'employee/drawMaterialsSelect', 	// 病理取材医生
	record_person: 'employee/recordIdSelect', 				// 病理记录人
	return_doctor: 'employee/returnSelect', 				// 复诊医生
	visit_doctor: 'employee/visitSelect', 					// 初诊医生
	billPhaseSelect: 'bill-phase/select',					// 账期
	bill_month_range: 'st-bill/billMonthRange',				// 财务汇总月份限制
	/* 增加结果类型筛选条件 2021-08-24  --耿琰 */
	result_type: 'result-type/select'						,// 结果类型
	// 增加带权限的业务员下拉 2021-10-19 6:24:43 ?F10: PM? --伍智睿
	salesman_adm: 'bs-salesman/selectByAreaAdmin',			// 业务系统 业务员下拉
	area_adm: 'bs-area/selectByAreaAdmin',					// 业务系统 区域下拉
	hospital_adm: 'bs-hospital/selectByBusiness',				// 业务系统 客户下拉
	getLeaderUser: 'bs-salesman/getLeaderUser'				
}

const data = {
	// 采集类型
	collect_type: [{ name:'单采', value:'69002' },{ name:'混采', value:'69004' }],
	// 菜单类型
	menu_type: [{ name:'顶部菜单', value: '1' }, { name:'左侧菜单', value: '2' }],
	// 权限级别
	permissions_level : [{ name:'1', value: '801' }, { name:'2', value: '802' }, { name:'3', value: '803' }],
	// 保密级别
	secret_level : [{ name:'一级', value: '1' }, { name:'二级', value: '2' }, { name:'三级', value: '3' }],
	// 设备状态
	device_status : [{ name:'停用', value: -1 },{ name:'待校准', value: 0 },{ name:'合格', value: 1 }],
	// 沟通类型
	communication_type : [{ name:'样本信息和结果沟通', value: '1' },{ name:'样本危急值通知', value: '2' },{ name:'咨询通知', value: '3' },{ name:'其他', value: '4' }],
	// 处理状态
	treatment_state : [{ name:'待处理', value: '0' },{ name:'已处理', value: '1' },{ name:'已完成', value: '2' }],
	// 回顾
	retrospect : [{ name:'是', value: '1' },{ name:'否', value: '2' },{ name:'不需要', value: '3' }],
	// 识别标签
	read_label:[{ item_name:'新冠', item_code: '69701' },{ item_name:'常规', item_code: '69702' },{ item_name:'抗体', item_code: '69703' }],
	// 使用状态
	user_mode: [{ name:'已使用', value: '1' }, { name:'未使用', value: '0' }],
	// 加减类型
	add_subtract: [{ name:'加做', value: '1' }, { name:'减做', value: '2' }],
	// 修改类型
	modification_type: [{ name:'修改病人资料', value: '1' }, { name:'修改医院信息', value: '2' }, { name:'其他类型', value: '3' }],
	// 节点类型
	node_type : [{ name:'开始', value: '1' },{ name:'结束', value: '2' },{ name:'普通', value: '3' }],
	// 公司状态、部门状态、
	company_state : [{ name:'启用', value: '1' },{ name:'待启用', value: '0' },{ name:'禁用', value: '-1' }],
	// 员工状态
	employee_state : [{ name:'启用', value: '1' },{ name:'待启用', value: '0' },{ name:'禁用', value: '2' }],
	// 账单类型
	bill_type: [{ name:'全部', value:'0' },{ name:'正常', value:'1' },{ name:'冲抵', value:'2' }],
	// 派送状态
	outsourcing_state: [{ name:'全部', value:'' },{ name:'待派送', value:'1' },{ name:'派送中', value:'2' },{ name:'已送达', value:'3' }],
	// 项目状态
	audit_status: [{ name:'全部', value:'99' },{ name:'待审核', value:'0' },{ name:'审核通过', value:'1' },{ name:'待录入', value:'-2' }],
	// 是否
	bool_status: [{ name:'是', value: '1' }, { name:'否', value:'0' }],
	// 添加状态
	add_status: [{ name:'待审核', value:'0' },{ name:'待录入', value:'-2' }],
	// 项目分类
	project_classify: [{ name:'单一项目', value:'25001' },{ name:'从属项目', value:'25002' },{ name:'组合项目', value:'25003' }, { name:'营销项目', value:'25004' }],
	// 数据转换
	result_data : [
		{ name:'结果', 		value:'result' },
		{ name:'报告结果', 	value:'result1' },
		{ name:'结果2', 	value:'result2' },
		{ name:'结果3', 	value:'result3' },
	],
	// 项目状态
	project_status: [
		{ name: '预添加', 	value: -2 },
		{ name: '未开启', 	value: -1 },
		{ name: '草稿',		value: 0 },
		{ name: '审核', 	value: 1 },
		{ name: '开启', 	value: 2 }
	],
	// 财务结算状态
	bill_status: [
		{ name: '待审核',			value: '45301'},
		{ name: '待结算',			value: '45302'},
		{ name: '已结算',			value: '45303'},
		{ name: '已作废',			value: '45304'},
		{ name: '业务员待审核',		value: '45305'},
		{ name: '业务员确认异常',	value: '45306'},
		{ name: '业务员确认通过',	value: '45307'}
	],
}
const Index = {
	...data,
	// 获取缓存
	async getCache({api, loading, param, way, refresh}){
		let _api = api && api.indexOf('/') > -1 ? api : apiList[api]
		
		let _data = refresh ? null : await $fn.dataSave(_api)
		
		if(!$fn.hasArray(_data)){
			if(way === 'post'){
				_data = await $http.submit(null, _api, { param, loading, dataName:null })
			}else{
				_data = await $http.pull(null, _api, { param, loading, dataName:null })
			}
			if( $fn.hasObject(_data) ){
				if(_data.items){
					_data = _data.items
				}
			}
			
			!refresh && $fn.dataSave(_api, _data)
		}
		return _data || []
	},
	async getData(code, api){
		let _data = []
		code.forEach( async v => {
			const _d = await $fn.dataSave(api + '-' + v)
			_data.push(_d)
		})
		return _data
	},
	// 获取 item 数据
	async getItemCache({loading, api, code, param, refresh}){
		let _data = []
		
		if($fn.hasArray(code)){
			// _data = await this.getData(code, api)
		}else{
			_data = await $fn.dataSave(api + '-' + code)
		}
		
		if(!$fn.hasArray(_data) || refresh){
			_data = await $http.submit(null, api, { param, submitLoading:loading, loading:false, dataName:null })
			
			if( $fn.hasArray(_data) && !$fn.hasArray(code) ){
				$fn.dataSave(api + '-' + code, _data)
			}else{
				_data.forEach( v => {
					$fn.dataSave(api + '-' + v['code'], v['children'])
				} )
			}
		}
		return $fn.hasArray(_data) ? _data : []
	},
	// 获取设备数据
	async getDisCache({loading, code }){
		return this.getItemCache({ loading, code, api:'dis-item/item', param:{dis_code: code}  })
	},
	// 获取字典数据
	async getDicCache({ loading, code, refresh }){
		const data = await this.getItemCache({ loading, code, refresh, api:'dictionary/items',  param:{pids: $fn.hasArray(code) ? code : [code]}  })
		if($fn.hasArray(code) && $fn.hasArray(data)){
			let stack = {}
			data.forEach(v=> stack[v.code] = v.children)
			return stack
		}else{
			return $fn.hasArray(data) ? (data[0].children ? data[0].children : data) : []
		}
	},
	// 获取设备名称数据
	async getDivCache(){
		return this.getCache({ api:'device_name' }).then(data=>{
			return data.map( v => ({ ...v, name: v.device_name + ' - ' + v.device_model }))
		})
	},
	// 获取外包单位
	async getWaiBaoDanWei(){
		const _api = 'project-team/laboratorySelect4Outsourcing'
		const _name = _api + '-type-2'
		let _data = await $fn.dataSave(_name)
		if(!_data){
			_data = await $http.submit(null, _api, { param:{type:2}, loading:false, dataName:null })
			$fn.dataSave(_name, _data)
		}
		return _data || []
	},
	// 保存所有缓存列表
	async saveCache(data, callback){
		if($fn.hasArray(data)){
			data.forEach((value,index)=>{
				const api = value['api']?.replace('api/','')
				$http.pull(null, api, { loading:false, onEnd:()=>{
					callback( parseInt(((index+1)/data.length) * 100) )
				}}).then(data=>{
					$fn.dataSave(api, data)
				})
			})
		}
	}
}
export default Index